<?php

if (!defined('DS')) {
    define('DS', DIRECTORY_SEPARATOR);
}
if (!defined('APP_ROOT')) {
    define('APP_ROOT', __DIR__);
}
if (!defined('DATA_DIR')) {
    define('DATA_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'data');
}

function loadFiradioPHP() {
    $dir = APP_ROOT . '/lib/FiradioPHP';
    require_once $dir . '/F.php';
    \FiradioPHP\F::scanDirTree($dir, '', function($a) {
        if ($a[1] === '') {
            return;
        }
        $path = implode(DS, $a);
        $pathinfo = pathinfo($path);
        if ($pathinfo['extension'] !== 'php') {
            return;
        }
        require_once($path);
    });
}

function initializer() {
    loadFiradioPHP();
    require_once APP_ROOT . DS . 'class' . DS . 'ClassOption.php';
    require_once APP_ROOT . DS . 'class' . DS . 'ClassToken.php';
    require_once APP_ROOT . DS . 'class' . DS . 'ClassAdmin.php';
    require_once APP_ROOT . DS . 'class' . DS . 'ClassQiniu.php';
    require_once APP_ROOT . DS . 'class' . DS . 'ClassYun.php';

    if (empty(\FiradioPHP\F::$oConfig)) {
        // 初始化F框架，参数是config根目录
        \FiradioPHP\F::init(APP_ROOT . DS . 'config');
    }
}

initializer();

function IPADDR() {
    $global_server = filter_input_array(INPUT_SERVER);
    return getIpAddr($global_server);
}

function getIpAddrIgnoreCase($array, $key) {
    if (isset($array[$key])) {
        return $array[$key];
    }
    $key = strtolower($key);
    if (isset($array[$key])) {
        return $array[$key];
    }
    $key = strtoupper($key);
    if (isset($array[$key])) {
        return $array[$key];
    }
}

function getIpAddr($server) {
    if (is_object($server)) {
        //swoole传进来的是一个对象
        $header = $server->header;
        $server = $server->server;
        //取得用户的IP地址
        $val = getIpAddrIgnoreCase($header, 'x-real-ip');
        if (!empty($val)) {
            return $val;
        }
    } else {
        //PHP-FPM和workerman还是原有的
        $val = getIpAddrIgnoreCase($server, 'HTTP_X_REAL_IP');
        if (!empty($val)) {
            return $val;
        }
        $val = getIpAddrIgnoreCase($server, 'HTTP_REMOTEIP');
        if (!empty($val))
            return $val;
        $val = getIpAddrIgnoreCase($server, 'HTTP_X_FORWARDED_FOR');
        if (!empty($val))
            return $val;
    }
    $val = getIpAddrIgnoreCase($server, 'REMOTE_ADDR');
    if (!empty($val)) {
        return $val;
    }
    return '0.0.0.0';
}
